package controlador;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JOptionPane;

import modelo.Ciudad;
import modelo.SitioInteres;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;
import org.jdom.JDOMException;

import vista.VentanaEjecutar;

public class ControladorGuiaTuristica implements ActionListener {
	
	private SessionFactory sessionFactory;
	private VentanaEjecutar ventanaEjecutar;
	
	public ControladorGuiaTuristica(VentanaEjecutar ventanaEjecutar) {
		this.ventanaEjecutar = ventanaEjecutar;
		Configuration configuration = new Configuration().configure();
		sessionFactory = configuration
				.buildSessionFactory(new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry());
	}
	
	public void guardarCiudad(Ciudad ciudad) {
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		session.save(ciudad);
		session.getTransaction().commit();
		session.close();
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		String mensaje = null;
		try {
			Ciudad ciudad = Ciudad.buscarCiudad(Integer.parseInt(ventanaEjecutar.getTextoIdCiudad()));
			
			ventanaEjecutar.setTextoNombre(ciudad.getNombre());
			ventanaEjecutar.setTextoEstado(ciudad.getEstado());
			ventanaEjecutar.setTextoPoblacion(String.valueOf(ciudad.getPoblacion()));
			ventanaEjecutar.setTextoSuperficie(String.valueOf(ciudad.getSuperficie()));
			ventanaEjecutar.setTextoResenaHistorica(ciudad.getResenaHistorica());
			ventanaEjecutar.limpiarPanel();
			
			for(SitioInteres sitioInteres : ciudad.getSitiosInteres()) {
				ventanaEjecutar.crearSitio(sitioInteres.getNombre(), sitioInteres.getUbicacion(), sitioInteres.getResena(), sitioInteres.getTelefonos());
			}
			
			guardarCiudad(ciudad);
			
		} catch (NumberFormatException e) {
			mensaje = "El id de la ciudad debe ser un numero entero";
		} catch (JDOMException e) {
			mensaje = "El archivo xml no es valido";
		} catch (IOException e) {
			mensaje = "El archivo no existe o no puede ser accedido";
		} catch (IllegalArgumentException e) {
			mensaje = e.getMessage();
		} catch (org.hibernate.exception.ConstraintViolationException e) {
			mensaje = "La ciudad ya esta registrada en la base de datos";
		}
		if (mensaje != null)
			JOptionPane.showMessageDialog(ventanaEjecutar, mensaje, "Error", JOptionPane.ERROR_MESSAGE);
	}

}
